/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function (strs) {
  // 创建一个映射表，用于存储相同字母组成的字符串
  const map = new Map();

  for (const str of strs) {
    // 将字符串拆分为字符数组，排序后再拼接成新字符串作为键
    // 字母异位词排序后会得到相同的字符串
    const key = str.split("").sort().join("");

    // 如果映射表中已有该键，则将当前字符串添加到对应数组中
    // 否则创建新的数组并添加当前字符串
    if (map.has(key)) {
      map.get(key).push(str);
    } else {
      map.set(key, [str]);
    }
  }

  // 将映射表中的值转换为数组并返回
  return Array.from(map.values());
};

// 测试示例
console.log(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]));
// 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

console.log(groupAnagrams([""]));
// 输出: [[""]]

console.log(groupAnagrams(["a"]));
// 输出: [["a"]]
